<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        // 函数是一等公民
        // 【1，函数可作为参数  2，函数可作为返回值--让函数去生成一个函数  3，函数可赋值给变量


        // 2.1 高阶函数-函数作为返回值
        function makeFn () {
            let msg = 'hello';
            return function () {
                console.log(msg);
            }
        };
        // const fn = makeFn();
        // fn();
        makeFn()();// makeFn()函数的返回结果是个函数  ,再接个()就可以访问到

        // 2.2高阶函数-函数作为返回值
        //once只执行一次的函数   知识储备:apply
        function once (fn) {  
            let done = true;
            return function () {
                if(done) {
                    done = false;
                    return fn.apply(this,arguments)
                }
            }
        }
        let paymoney = once (function(money) {
            console.log(`支付:${money}RMB`);
        });
        paymoney(5);//尽管调用很多次也只会执行一次
        paymoney(5);
        paymoney(5);
        paymoney(5);
    </script>
</body>
</html>